d8f2ac3e6ee26fc338f43c0512379a0ff98ea236,hbase-common/src/main/java/org/apache/hadoop/hbase/io/BoundedByteBufferPool.java,BoundedByteBufferPool,putBuffer,#ByteBuffer#,110

Before Change


    try {
      success = this.buffers.offer(bb);
      if (success) {
        this.totalReservoirCapacity += bb.capacity();
        average = this.totalReservoirCapacity / this.buffers.size(); // size will never be 0.
      }
    } finally {

After Change


      countOfBuffers++;
      assert 0 < countOfBuffers && countOfBuffers <= maxToCache;

      totalCapacity = toTotalCapacity(prevState) + bb.capacity();
      if (totalCapacity < 0) {
        if (LOG.isWarnEnabled()) {
          LOG.warn("Overflowed total capacity.");
        }
        return;
      }

      long state = toState(countOfBuffers, totalCapacity);
      if (stateRef.compareAndSet(prevState, state)) {
        break;
      }
    }

    // ConcurrentLinkQueue#offer says "this method will never return false"
    buffers.offer(bb);

    int runningAverageUpdate = Math.min(
        totalCapacity / countOfBuffers, // size will never be 0.
        maxByteBufferSizeToCache);
    while (true) {
      int prev = runningAverageRef.get();
      if (prev >= runningAverageUpdate || // only rises, never recedes
          runningAverageRef.compareAndSet(prev, runningAverageUpdate)) {
        break;
      }